// 路由 导航守卫
import router from '@/router'
import Store from '@/store'

import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
/*
  nprogress
  1. 安装 yarn add nprogress
  2. 导入 import Nprogress from 'nprogress'
         import 'nprogress/nprogress.css'
  3. NProgress.start()
     NProgress.done()
*/

// 前置守卫
const whitePath = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  NProgress.start()
  // 判断是否有token 值
  if (Store.state.user.token) {
    // 有token值 就不让其跳转到login页面
    if (to.path.toLowerCase() === '/login') {
      next('/')
    } else {
      // 其他页面 正常进入 除了判断有token之外 还要判断是否有用户信息
      if (Store.state.user.userInfo.userId) {
        next()
      } else {
        await Store.dispatch('user/getUserIngo')
        // 通过addRoutes添加的路由再经过一次导航守卫
        next(to.fullPath)
      }
    }
  } else {
    // 没有token值 去白名单的路径也放行
    if (whitePath.includes(to.path.toLowerCase())) {
      next()
    } else {
      next('/login?redirect=' + to.fullPath)
    }
  }
  NProgress.done()
})
// 后置守卫, 并不是每个路由跳转都会经过后置守卫，因为他当前已经处于路由所对应的组件时，你跳转它不会再次触发
router.afterEach(() => {
  NProgress.done()
})
